package main

import (
	"log"
	"os"
	"os/signal"
	"syscall"
	"time"

	"hawkeye/client"
	"hawkeye/config"
	"hawkeye/protocol"
)

func main() {
	// 加载配置（优先使用YAML，如果不存在则使用JSON）
	cfg, err := config.LoadConfig("config/config.yaml")
	if err != nil {
		log.Fatalf("加载配置失败: %v", err)
	}

	// 创建客户端
	cli := client.NewClient(cfg)

	// 注册事件处理器
	cli.RegisterEventHandler(protocol.EventHeartbeat, func(msg *protocol.Message) {
		log.Printf("收到心跳响应: %+v", msg)
	})

	cli.RegisterEventHandler(protocol.EventAuth, func(msg *protocol.Message) {
		log.Printf("收到认证响应: %+v", msg)
	})

	cli.RegisterEventHandler(protocol.EvenRegister, func(msg *protocol.Message) {
		log.Printf("收到注册响应: %+v", msg)
	})

	// 设置信号处理
	sigChan := make(chan os.Signal, 1)
	signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)

	// 启动客户端
	go func() {
		log.Println("启动TCP客户端...")
		log.Printf("尝试连接到服务器: %s:%d", cfg.Client.ServerHost, cfg.Client.ServerPort)
		if err := cli.Connect(); err != nil {
			log.Printf("客户端启动失败: %v", err)
		}
	}()

	// 等待连接建立
	time.Sleep(2 * time.Second)

	// 发送测试消息
	if cli.IsConnected() {
		// 发送认证消息
		if err := cli.SendAuth("test_token", "user_001"); err != nil {
			log.Printf("发送认证消息失败: %v", err)
		}
		// 调用注册
		if err := cli.SendRegister(); err != nil {
			log.Printf("发送认证消息失败: %v", err)
		}
	} else {
		log.Println("客户端未连接到服务器")
	}

	// 等待终止信号
	<-sigChan
	log.Println("接收到终止信号，正在关闭客户端...")

	// 断开连接
	cli.Disconnect()
	log.Println("客户端已关闭")
}
